﻿using System;
using Scommesse.Model;
using Scommesse.Utility;
using Scommesse.View.Admin;

namespace Scommesse.Presenters.Admin
{
    class CategoriaPresenter : ICategoriaPresenter
    {
        private readonly CategoriaDialog _categoriaDialog;
        private readonly Palinsesto _palinsesto;

        public CategoriaPresenter(CategoriaDialog dialog)
        {
            _categoriaDialog = dialog;
            _categoriaDialog.AddListener(this);
            _palinsesto = Palinsesto.GetPalinsesto();
            _categoriaDialog.ShowDialog();
        }

        public void Load_View()
        {
            _categoriaDialog.CatEsistente = false;

            foreach (Tipologia tipologia in Enum.GetValues(typeof(Tipologia)))
            {
                _categoriaDialog.SetTipologia = StringValueAttribute.GetStringValue(tipologia);
            }
        }

        public void ConfermaAggiungiCategoria()
        {
            String nomeCategoria = _categoriaDialog.NomeCategoria;
            int count = _categoriaDialog.TipologieCount;

            if (String.IsNullOrEmpty(nomeCategoria))
                _categoriaDialog.CategoriaError =  "Inserisci il nome della categoria";
            
            if (count == 0)
            {
                _categoriaDialog.CheckError =  "Seleziona una o più tipologie";
            }

            else if ( _categoriaDialog.GetTipologie.Contains("1X2") && _categoriaDialog.GetTipologie.Contains("12"))
            {
                _categoriaDialog.CheckError = "Tipologie 12 e 1X2 non possono coesistere";
            }

            else if ((count != 0) && (!String.IsNullOrEmpty(nomeCategoria)))
            {
                var tipologie = new string[count];
                int index = 0;
                foreach (string i in _categoriaDialog.GetTipologie)
                {
                    tipologie[index] = i;
                    index++;
                }

                AggiungiCategoria(nomeCategoria, tipologie);
            }
        }

        public void AggiungiCategoria(String nomeCategoria, String[] tipologie)
        {
            try
            {
                var t = new Tipologia[tipologie.Length];
                int index = 0;

                foreach (String s in tipologie)
                {
                    t[index] = StringValueAttribute.GetEnumByStringValueAttribute<Tipologia>(s);
                    index++;
                }
                _palinsesto.AddCategoria(nomeCategoria, t);

                //DataSaver.SavePalinsestoOnFile(_palinsesto);

                _categoriaDialog.Close();
            }
            catch (ArgumentException e)
            {
                e.ToString();
                _categoriaDialog.CatEsistente = true;
            }
        }
            
    }
}